package com.at.c05_stack;

/**
 * 面试题：方法中定义的局部变量是否线程安全？具体情况具体分析
 *
 * 何为线程安全？
 *      如果只有一个线程才可以操作此数据，则是线程安全
 *      如果有多个线程操作此数据，则此数据为共享数据。如果不考虑同步机制的话，会存在线程安全问题
 *
 * @author huangchao E-mail:fengquan8866@163.com
 * @version 创建时间：2024/7/3 20:55
 */
public class StringBuilderTest {

    // s1的声明方式是线程安全的
    public static void method1() {
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
    }

    // 不安全
    public static void method2(StringBuilder stringBuilder) {
        stringBuilder.append("a");
        stringBuilder.append("b");
    }

    public static StringBuilder method3() {
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        return s1;
    }

    public static void main(String[] args) {
        StringBuilder s = new StringBuilder();
        new Thread(() -> {
            s.append("a");
            s.append("b");
        }).start();
        method2(s);

        method1();
    }
}
